package com.agv.web;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;


import com.agv.core.objectDomain.GenericRowData;
import com.agv.core.util.UtileriaBD;


public class GenericActionABC extends Action{
	
	private UtileriaBD utileriaBD;

	public void setUtileriaBD(UtileriaBD utileriaBD) {
		this.utileriaBD = utileriaBD;
	}

	
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		GenericRowData data = new GenericRowData();
		List<String> encabezados = new ArrayList<String>();
		
		Map<String,Object> datosFila = new HashMap<String, Object>();
		
		data.setNombreSecuencia( request.getParameter("secuencia") );
		data.setNombreTabla( request.getParameter("tabla") );
		data.setNombrePK( request.getParameter("nombrePk") );
		
		String valorPK = request.getParameter( data.getNombrePK() );
		data.setValorPK(valorPK);
		
		
		String accion = request.getParameter("accion");
		
		Enumeration<String> params =  request.getParameterNames();
		
		while( params.hasMoreElements() ){
			//solo guardamos los encabezados de la tabla
			String param = params.nextElement();
			
			if( !( param.equals("secuencia") || param.equals("tabla") 
				|| param.equals("method") || param.equals("accion")
				|| param.equals(data.getNombrePK()) || param.equals("nombrePk"))  ){
				
				encabezados.add( param );
			}
		}
		
		
		for (int i = 0; i < encabezados.size(); i++) {
			datosFila.put( encabezados.get(i), convertStringToObject(request.getParameter(encabezados.get(i))) );
		}
		
		data.setDatosFila(datosFila);
		
		
		if( accion.equals("alta") ){
			request.setAttribute("numSecuencia", utileriaBD.setRegister(data) );
			
		}else if( accion.equals("eliminar") ){
			utileriaBD.deleteRegister(data);
			
		}else if( accion.equals("editaObjeto") ){
			utileriaBD.updateRegister(data);
			
		}
		
		return mapping.findForward("respInsert");
	}
	
	
	private Object convertStringToObject(String campo) throws ParseException{
		
		if(campo.matches("(\\d){4}-(\\d){2}-(\\d){2}T(.)*") ){
			
			String[] fecha = campo.split("T");
			
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			return sdf.parse( fecha[0] );
		
		}else if( campo.matches("(\\d)+") ){
			return Integer.parseInt(campo);
			
		}else if ( campo.matches("(true)|(false)") ){
			return campo.equals("true")? 1 : 0;
			
		}else if( campo.trim().equals("") ){
			return null;
		}
		
		//si es String
		return campo;
	}
	
	
	
}
